package com.rgs.se.bloom;

import java.util.LinkedList;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author Ren Gaoshuai
 * @ClassName TestMain1
 * @Description TODO
 * @date 2021-10-11 10:19
 **/
public class TestMain1 {

    public static void main(String[] args) {
        Random random = new Random();
        // 假设我们的数据有 1 百万
        int size = 1000;

        // 用一个数据结构保存一下所有实际存在的值
        LinkedList<Integer> existentNumbers = new LinkedList<>();

        MyBloomFilter1 bloomFilter = new MyBloomFilter1(size);

        for (int i = 0; i < size; i++) {
            int randomKey = random.nextInt();
            existentNumbers.add(randomKey);
            bloomFilter.add(randomKey);
        }

        // 验证已存在的数是否都存在
        AtomicInteger count = new AtomicInteger();
        AtomicInteger finalCount = count;
        existentNumbers.forEach(number -> {
            if (bloomFilter.contains(number)) {

                finalCount.incrementAndGet();
            }
        });

        System.out.printf("实际的数据量： %d, 判断存在的数据量: %d \n", size, count.get());


        // 验证10个不存在的数（验证 误判率的）
        count = new AtomicInteger();
        while (count.get() < 10) {
            int key = random.nextInt();
            //这个数存在的话，判断下一个
            if (existentNumbers.contains(key)) {
                continue;
            } else {
                // 这里一定是不存在的数
                System.out.println(bloomFilter.contains(key));
                count.incrementAndGet();
            }
        }
    }
}
